home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.2 / ControllerID.st < prev    next >
Text File  |  1993-07-24  |  4KB  |  137 lines

  1. "    NAME        ControllerID
  2.     AUTHOR        rmd@cs.man.ac.uk
  3.     FUNCTION adds a unique id to each controller 
  4.     ST-VERSIONS    2.2
  5.     PREREQUISITES     
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    22 Jan 1989
  10. SUMMARY    ControllerID
  11.     Adds a unique ID to each controller - this is not
  12.    dependent on OOP or time, but only on the sequence in which a
  13.    controller spawns other controllers. This takes a long time to file
  14.    in since it adds two instance variables to controller and
  15.    re-compiling all controllers is a lengthy process.(2.2). RMD.
  16. "!
  17. 'From Smalltalk-80, Version 2.3 of 13 June 1988 on 19 June 1989 at 12:42:37 pm'!
  18.  
  19.  
  20.  
  21. !Behavior methodsFor: 'accessing instances and variables'!
  22.  
  23. allSubInstances
  24.     "Answer a collection of all instances of subclasses of this class. this does not include instances of this class."
  25.  
  26.     | collection |
  27.     collection _ OrderedCollection new.
  28.     self allSubInstancesDo: [:each | collection add: each].
  29.     ^collection! !
  30.  
  31. Controller addInstVarName: 'controllerID'!
  32.  
  33. Controller addInstVarName: 'childCount' !
  34.  
  35. !Controller methodsFor: 'private'!
  36.  
  37. controllerID: aString 
  38.     "This should never be sent unless you really know what you are doing!! 
  39.      If you do send this, make sure that the ID you assign is unique. 
  40.     When this is set I reset the childCount."
  41.  
  42.     controllerID _ aString.
  43.     childCount _ 0! !
  44.  
  45. !Controller methodsFor: 'printing'!
  46.  
  47. printOn: aStream 
  48.     "Append to the argument aStream a sequence of characters that identifies the receiver."
  49.  
  50.     super printOn: aStream.
  51.     aStream nextPutAll: ' (', self controllerID, ')'.! !
  52.  
  53. !Controller methodsFor: 'generation access'!
  54.  
  55. controllerID
  56.     "Answer with my unique identifier."
  57.  
  58.     ^controllerID!
  59.  
  60. nextChildID
  61.     "Return the identifier of my next child. Used as a way of generate unique controller IDs"
  62.  
  63. childCount_childCount + 1.
  64. ^controllerID, '.', (childCount printString)! !
  65.  
  66.  
  67.  
  68. !Controller class methodsFor: 'CID initialisation'!
  69.  
  70. initialiseCID
  71.     "Initialise all the currently exisiting processes with unique IDs. Prompt 
  72.     for the basenames aString."
  73.     "Controller initialiseCID"
  74.  
  75.     self initialiseCID: (FillInTheBlank request: 'Basename for these controllers')!
  76.  
  77. initialiseCID: aString 
  78.     "Initialise all the currently exisiting controllers with unique IDs based   
  79.     on the basename aString, concatenated with a count."
  80.  
  81.     | controllerList |
  82.     controllerList _ Controller allSubInstances.
  83.     controllerList addAll: Controller allInstances.
  84.     1 to: controllerList size do: [:each | (controllerList at: each)
  85.             controllerID: aString , '.' , each printString]! !
  86.  
  87. !Controller class methodsFor: 'instance creation'!
  88.  
  89. new
  90.     "Fix it so that all newly created instances just get a fixed
  91. string until all methods are properly installed. Then make sure that
  92. all existing instances include a string, then install the real
  93. method."
  94.  
  95.     | newController |
  96.     newController _ super new.
  97.     newController controllerID: 'dummy'.
  98.     newController initialize.
  99.     ^newController! !
  100.  
  101. Controller initialiseCID: 'dummy'!
  102.  
  103.  
  104.  
  105. !Controller class methodsFor: 'instance creation'!
  106.  
  107. new
  108.     "Create a new instance of controller. To all the initialisation for it  
  109.     and instal and prropriate CID."
  110.  
  111.     | newController |
  112.     newController _ super new.
  113.     ScheduledControllers activeController isNil
  114.         "If there is no active controller the interrupt key was pressed while it was searching
  115.          for a new controller. If it was just will in with a dummy controller name."
  116.         ifTrue: 
  117.             [newController controllerID: 'interrupt']
  118.         ifFalse: [newController controllerID: ScheduledControllers activeController nextChildID].
  119.     newController initialize.
  120.     ^newController! !
  121.  
  122.  
  123. Controller comment:
  124. 'A Controller coordinates a view, its model, and user actions.
  125.  
  126. Instance Variables:
  127.     model    <Object | Model>
  128.     view     <View>
  129.     sensor     <InputSensor>
  130.     childCount <Integer> Used to generate the CID of any child controllers
  131.     controllerID    <String> My CID'!
  132.  
  133.  
  134.  
  135.  
  136.  
  137.